import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class CurrentModifyExceptionDemo {
    public static void main(String[] args) {
        //创建集合对象
        List<String> list = new ArrayList<String>();
        //添加元素
        list.add("Hello");
        list.add("World");
        list.add("Java");
        //遍历集合，得到每一个元素，看有没有 “world”这个元素，如果有，就添加一个“javaee”元素
/*        Iterator<String> it = list.Iterator();
        while(it.hasNext()){
            String str = it.next();  //next()方法会调用checkForComodification()方法，
                                     //后者会检查 modCount 和 expectedModCount 值是否一致,不一致时报错
           if(str.equals("World"))
                list.add("Javaee");   //add方法会修改 modCount的值
        }

*/
        //执行完后，发现报错：ConcurrentModificationException (并发修改异常)
        //第16行出了问题
        //产生错误原因：
        //  Arraylist父类中的成员变量 modCount (实际修改集合次数) 和 expectedModCount (预期修改集合次数) 的值不一致，
        // 导致 java.util.ArrayList$Itr.checkForComodification 出错

//解决方法： 通过for循环和get()方法遍历
        for(int i = 0; i < list.size();i++){
            String str = list.get(i);
            if(str.equals("World"))
                    list.add("Javaee");
        }
                      //不报错原因： 虽然 add()方法对modCount的值进行修改，但 get()方法不调用checkForComodification()方法

        //输出集合对象
        System.out.println(list);

    }
}
